% IN:
%  indeks_robota - indeks robota, ktory powinien rozpoczac manewr
%    wyprzedzania
% OUT:
%  0 - manewr wyprzedzania nie byl mozliwy do wykonania (nie udalo sie
%    zarezerwowac potrzebnych pol lub wszystkie 6 pol przed robotem jest juz
%    zajete
%  1 - manewr wyprzedzania rozpoczety pomyslnie (stan robota zmieniony na
%    3, oraz do tablicy robot.droga zapisana droga ktora robot bedzie musial
%    jechac)
%
% Zalozenia:
%  - robot jest w glownym korytarzu, po prawej stronie
function ret = rozpocznij_manewr_wyprzedzania(indeks_robota)
    global mapa;
    global roboty;

	%kierunek=kierunek_robota(indeks_robota,0);
    %wektor_kierunku=roboty(indeks_robota).kierunek;
	pozycja=roboty(indeks_robota).pozycja;
    kolejne_pole = roboty(indeks_robota).droga(1,:);
    wektor_kierunku = indeks_kierunku(kolejne_pole-pozycja);
    roboty(indeks_robota).kierunek = wektor_kierunku;
    kierunek = kierunek_robota(indeks_robota,0);
	max=6;

	% sprawdzenie, czy ponizszy for nie wyjdzie poza mape
    if (wektor_kierunku==1 && pozycja(2)-max<1)                max=pozycja(2)-1;
    elseif (wektor_kierunku==2 && pozycja(1)+max>size(mapa,1)) max=size(mapa,1)-pozycja(1);
    elseif (wektor_kierunku==3 && pozycja(2)+max>size(mapa,2)) max=size(mapa,2)-pozycja(2);
    elseif (wektor_kierunku==4 && pozycja(1)-max<1)            max=pozycja(1)-1;
    end;

	% wyszukanie najblizszego wolnego pola na linii 6 pol przed robotem
	for (i=1:max)
		if(mapa(pozycja(1)+kierunek(1)*i,pozycja(2)+kierunek(2)*i)==0) % pole przed robotem wolne?
			potrzebne_pola=[];
            % wygenerowanie pol na sasiednim pasie, ktore trzeba
            % zarezerwowac do manewru (ale tylko jesli robot faktycznie cos
            % musi wyprzedzic - jesli pole przed nim jest puste, to nie
            % zajmuje sasiedniego pasa)
            j=0;
            if(i>1)
                for (j=0:i) 
                    pole_na_lewo=kierunek_robota(indeks_robota,-1);

                    potrzebne_pola = [ potrzebne_pola ; [
                        pozycja(1)+pole_na_lewo(1)+j*kierunek(1) pozycja(2)+pole_na_lewo(2)+j*kierunek(2)
                        ] ];
                end;
            end;
            % wygenerowanie pola na aktualnym pasie, na ktore powroci robot
            potrzebne_pola = [ potrzebne_pola ; [ 
                    pozycja(1) + j*kierunek(1) pozycja(2) + j*kierunek(2)
                    ] ];
                
			if(rezerwuj(1,indeks_robota,potrzebne_pola)) % pola zarezerwowane pomyslnie?
                if(roboty(indeks_robota).stan==4) % stan: kolejkowanie
                    usun_z_kolejki(indeks_robota);
                end;
                roboty(indeks_robota).stan = 3; % stan: wyprzedzanie
                roboty(indeks_robota).droga = potrzebne_pola;
                ret = 1;
				return;
            end;
        end;
    end;
    
	ret = 0;
